import request from './request'

/**
 * 添加商品到购物车
 * @param {Object} obj - 包含购物车商品信息的参数对象
 * @param {number} obj.productSpecificationId - 商品规格ID（必填，用于区分同一商品的不同规格）
 * @param {number} obj.quantity - 商品数量（必填，需为大于0的整数）
 * @returns {Promise} - 返回一个Promise对象，包含接口请求结果
 *                      成功时返回购物车更新信息，失败时返回错误信息
 */
export const addShippingCart = (obj) => {
  // 发送POST请求到购物车接口，添加商品
  return request.post("/shipping-cart", {
    productId: obj.productId, // 商品Id
    productSpecificationId: obj.productSpecificationId, // 商品规格ID
    quantity: obj.quantity // 商品数量
  })
}

/**
 * 查询用户的购物车列表
 *
 * 该函数通过发起 GET 请求到 "/shipping-cart" 接口，获取当前用户的购物车数据
 *
 * @returns {Promise} 返回一个 Promise 对象，
 *                   成功时解析为用户的购物车列表数据，
 *                   失败时可能包含错误信息
 */
export const queryUserShippingCart = () => {
  return request.get("/shipping-cart")
}

/**
 * 删除购物车商品
 * @param {Array<string|number>} ids - 要删除的购物车商品ID数组
 * @returns {Promise} 返回一个Promise对象，用于处理请求的成功与失败结果
 *
 * 说明：
 * 1. 该函数通过HTTP DELETE方法请求购物车删除接口
 * 2. 使用URL查询参数传递多个商品ID，格式为?ids=id1&ids=id2...
 * 3. 对每个ID进行URI编码，确保特殊字符能正确传递
 * 4. 依赖的request对象应已配置基础URL和拦截器等
 */
export const deleteShippingCart = (ids) => {
  // 构建删除请求的URL，将ids数组转换为查询参数
  // 例如：ids为[1,2,3]时，生成的URL为"/shipping-cart?ids=1&ids=2&ids=3"
  return request.delete(`/shipping-cart?${ids.map(id => `ids=${encodeURIComponent(id)}`).join('&')}`)
}

/**
 * 更新购物车中指定商品的数量
 * @param {string|number} id - 要更新数量的购物车商品ID
 * @param {number} quantity - 商品的新数量
 * @returns {Promise} 返回一个Promise对象，用于处理请求的成功与失败结果
 *
 * 说明：
 * 1. 该函数通过HTTP PUT方法请求购物车商品数量更新接口
 * 2. URL路径中包含商品ID，查询参数传递新的商品数量
 * 3. 例如：当id为123且quantity为5时，请求URL为"/shipping-cart/update/123?newQuantity=5"
 * 4. 依赖的request对象应已配置基础URL和拦截器等
 */
export const updateCartItemQuantity = (id, quantity) => {
  return request.put(`/shipping-cart/update/${id}?newQuantity=${quantity}`)
}

/**
 * 查询购物车中的折扣商品
 * @returns {Promise} 返回一个Promise对象，用于处理请求的成功与失败结果
 *
 * 说明：
 * 1. 该函数通过HTTP GET方法请求购物车折扣商品接口
 * 2. 请求的URL为"shipping-cart/discount"，用于获取购物车中所有享受折扣的商品信息
 * 3. 依赖的request对象应已配置基础URL和拦截器等
 */
export const queryDiscountProducts = () => {
  return request.get('/shipping-cart/discount')
}

/**
 * 将购物车中的商品商品移至收藏夹的接口函数
 *
 * 该函数通过POST请求将购物车中指定ID的商品批量移到用户收藏夹，
 * 操作成功后通常会从购物车中移除这些商品并添加到收藏列表
 *
 * @param {Array<string|number>} ids - 要迁移的商品ID数组
 *                                    示例：[1001, 1002] 或 ['prod_8975', 'prod_1234']
 * @returns {Promise<Object>} 返回Promise对象
 *                            - 成功：resolve包含操作结果的对象（如成功迁移的数量、提示信息等）
 *                            - 失败：reject错误信息（如网络异常、商品不存在等）
 */
export const removeShippingCartToFavorite = (ids) => {
  // 构建查询字符串，格式为 "ids=xxx&ids=yyy"（支持多个商品ID批量操作）
  const queryString = ids.map(id => `ids=${encodeURIComponent(id)}`).join('&');
  // 发送POST请求到迁移接口，通过URL参数传递商品ID列表
  return request.post(`/shipping-cart/remove2favorite?${queryString}`)
}

export const batchAddShippingCart = (data) => {
  return request.post("/shipping-cart/batch/save", data)
}

export const queryShippingCartCount = () => {
  return request.get("/shipping-cart/count")
}